1462. Хитрая сортировка

 

Дана последовательность чисел. Вам следует упорядочить их по неубыванию последней цифры, а при равенстве последних цифр – по неубыванию самих чисел.

 

Вход. Первая строка содержит число n (1 ≤ n ≤ 100), а вторая – сами натуральные числа, не превышающие 32000.

 

Выход. Выведите последовательность чисел, упорядоченную согласно условию.

 

Пример входа

Пример выхода

7

12 15 43 13 20 1 15

20 1 12 13 43 15 15

 

 

РЕШЕНИЕ

сортировка

 

Анализ алгоритма

Реализуйте компаратор для сортировки чисел.

 

Пример

Массив чисел отсортирован по возрастанию последней цифры. Числа, имеющие одинаковую последнюю цифру, отсортированы по возрастанию.

 

Реализация алгоритма

Объявим рабочий массив.

 

int m[100];

 

Функция сортировки. Упорядочиваем числа по неубыванию последней цифры. Если последние цифры равны, то упорядочиваем по неубыванию самих чисел.

 

int f(int a, int b)

{

  if (a % 10 == b % 10) return a < b;

  return a % 10 < b % 10;

}

 

Читаем входные данные.

 

scanf("%d",&n);

for(i = 0; i < n; i++)

  scanf("%d",&m[i]);

 

Сортируем массив чисел.

 

sort(m,m+n,f);

 

Выводим результирующий массив.

 

for(i = 0; i < n - 1; i++)

  printf("%d ",m[i]);

printf("%d\n",m[n-1]);

 

Java реализация

 

import java.util.*;

 

public class Main

{

  public static class MyFun implements Comparator<Integer>

  {

    public int compare(Integer a, Integer b)

    {

      if (a % 10 == b % 10) return a - b;

      else return a % 10 - b % 10;

    }

  }

 

  public static void main(String[] args)

  {

    Scanner con = new Scanner(System.in);

    int n = con.nextInt();

    Integer m[] = new Integer[n];

    for(int i = 0; i < n; i++) m[i] = con.nextInt();

 

    Arrays.sort(m, new MyFun());

     

    for(int i = 0; i < n; i++) System.out.print(m[i] + " ");

    System.out.println();

    con.close();

  }

}

 

Python реализация

 

import sys

from functools import cmp_to_key

 

def compare(a, b):

  if a % 10 == b % 10: return a - b;

  return a % 10 - b % 10;

 

n = int(input())

lst = []

for line in sys.stdin:

  for var in line.split():

    lst.append(int(var))

 

res = sorted(lst, key = cmp_to_key(compare))

print(*res)